﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using TCC_Hotel.Serviços.OtherServices;
using TCC_Hotel.Entidades;
using TCC_Hotel.Serviços.BDServices;

namespace TCC_Hotel.Apresentacao.Apartamentos
{
    public partial class CadastrarApartamento : System.Web.UI.Page
    {
        ApartamentoService servico = new ApartamentoService();
        

        /// <summary>
        /// Carregamento da pagina
        /// </summary>   
        protected void Page_Load(object sender, EventArgs e)
        {
            //Recupera o usuario corrente
            string usuario = Request.ServerVariables["AUTH_USER"].ToString();

            LoginService servico_Login = new LoginService();
            //Verifica permissao ao acesso da página
            if (!servico_Login.RecuperarPermissaoCache(usuario).Cadastrar_Apartamento)
            {
                //Redireciona para a pagina inicial
                Response.Redirect("~/");
            }
            if (!IsPostBack)
            {
                //Recupera o parametro da URL
                string proximo = Request.Params["proximoNumero"];
                txtNumero.Text = proximo;

            }
        }

        /// <summary>
        /// Tenta salvar o apartamento no banco de dados
        /// </summary>
        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            ComumServices comum = new ComumServices();

            //preenche a lista obrigatoria para verificar se todos os campos obrigatorios fora preenchidos
            List<string> listaObrigatoria = new List<string>() 
            { 
                txtNumero.Text.Trim(),
                txtNome.Text.Trim()               
            
            };


            //Verifica se algum campo obrigatório nao foi preenchido
            if (!comum.ValidaCamposObrigatorios(listaObrigatoria))
            {
                MensagemJS("ERRO: Campo(s) obrigatório(s) em branco");               
                return;
            }         

            try
            {
                Apartamento apartamento = new Apartamento()
                {
                    Nome = txtNome.Text.Trim(),
                    Numero = Convert.ToInt32(txtNumero.Text.Trim()),
                    QntMaximaHospedes = Convert.ToInt32(ddlQuantidade.SelectedValue)

                };

                //chama o serviço que insere o apatamento empresa no banco de dados
                if (servico.CadastrarApartamento(apartamento))
                {
                    MensagemJS("Apartamento incluído com sucesso!");
                    HttpContext.Current.Cache.Remove("Lista_Apartamentos");
                }
                else
                {
                    MensagemJS("ERRO: Apartamento com esse número já existente");                 
                    return;
                }

            }
            catch (Exception)
            {
                //se ocorrer exceção lanca mensagem para o usuário
                MensagemJS("ERRO: Campo(s) com valor(es) inválido(s)");               
                return;

            }

            //Limpa todos os campos após o cadastro
            PosCadastro();

        }

        /// <summary>
        /// Limpa todos os campos
        /// </summary>
        protected void btnLimpar_Click(object sender, EventArgs e)
        {
             txtNome.Text = null;
             txtNumero.Text = null;
             ddlQuantidade.SelectedValue = "1";  
        }

        /// <summary>
        /// modifica campos pos cadastro
        /// </summary>
        protected void PosCadastro()
        {
            txtNome.Text = null;
            txtNumero.Text = (Convert.ToInt32(txtNumero.Text) + 1).ToString();
            ddlQuantidade.SelectedValue = "1";
        }

        /// <summary>
        /// Evento de click do botao voltar 
        /// </summary>
        protected void btnVoltar_Click(object sender, EventArgs e)
        {
            //Redireciona para a pagina anterior
            Response.Redirect("~/Apresentacao/Apartamentos/ListarApartamentos.aspx");
        }

        /// <summary>
        /// Lança um popup em javaScript com alguma mensagem
        /// </summary>
        /// <param name="msg">Mensagem do popup</param>
        public void MensagemJS(string msg)
        {
            //Formata um alert para o usuário
            Page.ClientScript.RegisterStartupScript(

                     this.GetType(),

                     "Mensagem",

                     "$(window).load(function(){alert('" + msg + "')});",

                     true);

        }
    }
}